#include "stm32f4xx_hal.h"
#include "Version.h"
#include "DevicesLed.h"




void vLedInit(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    /* GPIO Ports Clock Enable */
    LED_VI_RED1_RCC_GPIO_CLK_ENABLE();
    LED_VI_RED2_RCC_GPIO_CLK_ENABLE();
    LED_VI_GREEN_RCC_GPIO_CLK_ENABLE();
    LED_VI_YELLOW_RCC_GPIO_CLK_ENABLE();
    LED_GREEN_RCC_GPIO_CLK_ENABLE();
    LED_YELLOW_RCC_GPIO_CLK_ENABLE();
    LED_TEMPERATURE_1_RCC_GPIO_CLK_ENABLE();
    LED_TEMPERATURE_2_RCC_GPIO_CLK_ENABLE();

    /*Configure GPIO pin Output Level */
    HAL_GPIO_WritePin(LED_VI_RED1_GPIO_Port, LED_VI_RED1_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(LED_VI_RED2_GPIO_Port, LED_VI_RED2_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(LED_VI_GREEN_GPIO_Port, LED_VI_GREEN_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(LED_VI_YELLOW_GPIO_Port, LED_VI_YELLOW_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(LED_YELLOW_GPIO_Port, LED_YELLOW_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(LED_TEMPERATURE_1_GPIO_Port, LED_TEMPERATURE_1_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(LED_TEMPERATURE_2_GPIO_Port, LED_TEMPERATURE_2_Pin, GPIO_PIN_SET);

    /*Configure GPIO pin : PtPin */
    GPIO_InitStruct.Pin = LED_VI_RED1_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(LED_VI_RED1_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LED_VI_RED2_Pin;
    HAL_GPIO_Init(LED_VI_RED2_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LED_VI_GREEN_Pin;
    HAL_GPIO_Init(LED_VI_GREEN_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LED_VI_YELLOW_Pin;
    HAL_GPIO_Init(LED_VI_YELLOW_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LED_GREEN_Pin;
    HAL_GPIO_Init(LED_GREEN_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LED_YELLOW_Pin;
    HAL_GPIO_Init(LED_YELLOW_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LED_TEMPERATURE_1_Pin;
    HAL_GPIO_Init(LED_TEMPERATURE_1_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = LED_TEMPERATURE_2_Pin;
    HAL_GPIO_Init(LED_TEMPERATURE_2_GPIO_Port, &GPIO_InitStruct);

    LED_CLOSE();
}

void vLedOpen(uint16_t ucNumber)
{
    if(ucNumber & LED_VI_RED1)
        HAL_GPIO_WritePin(LED_VI_RED1_GPIO_Port, LED_VI_RED1_Pin, GPIO_PIN_RESET);
    if(ucNumber & LED_VI_RED2)
        HAL_GPIO_WritePin(LED_VI_RED2_GPIO_Port, LED_VI_RED2_Pin, GPIO_PIN_RESET);
    if(ucNumber & LED_VI_GREEN)
        HAL_GPIO_WritePin(LED_VI_GREEN_GPIO_Port, LED_VI_GREEN_Pin, GPIO_PIN_RESET);
    if(ucNumber & LED_VI_YELLOW)
        HAL_GPIO_WritePin(LED_VI_YELLOW_GPIO_Port, LED_VI_YELLOW_Pin, GPIO_PIN_RESET);

    if(ucNumber & LED_GREEN)
        HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
    if(ucNumber & LED_YELLOW)
        HAL_GPIO_WritePin(LED_YELLOW_GPIO_Port, LED_YELLOW_Pin, GPIO_PIN_RESET);

    if(ucNumber & LED_TEMPERATURE_1)
        HAL_GPIO_WritePin(LED_TEMPERATURE_1_GPIO_Port, LED_TEMPERATURE_1_Pin, GPIO_PIN_RESET);
    if(ucNumber & LED_TEMPERATURE_2)
        HAL_GPIO_WritePin(LED_TEMPERATURE_2_GPIO_Port, LED_TEMPERATURE_2_Pin, GPIO_PIN_RESET);
}

void vLedClose(uint16_t ucNumber)
{
    if(ucNumber & LED_VI_RED1)
        HAL_GPIO_WritePin(LED_VI_RED1_GPIO_Port, LED_VI_RED1_Pin, GPIO_PIN_SET);
    if(ucNumber & LED_VI_RED2)
        HAL_GPIO_WritePin(LED_VI_RED2_GPIO_Port, LED_VI_RED2_Pin, GPIO_PIN_SET);
    if(ucNumber & LED_VI_GREEN)
        HAL_GPIO_WritePin(LED_VI_GREEN_GPIO_Port, LED_VI_GREEN_Pin, GPIO_PIN_SET);
    if(ucNumber & LED_VI_YELLOW)
        HAL_GPIO_WritePin(LED_VI_YELLOW_GPIO_Port, LED_VI_YELLOW_Pin, GPIO_PIN_SET);

    if(ucNumber & LED_GREEN)
        HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
    if(ucNumber & LED_YELLOW)
        HAL_GPIO_WritePin(LED_YELLOW_GPIO_Port, LED_YELLOW_Pin, GPIO_PIN_SET);

    if(ucNumber & LED_TEMPERATURE_1)
        HAL_GPIO_WritePin(LED_TEMPERATURE_1_GPIO_Port, LED_TEMPERATURE_1_Pin, GPIO_PIN_SET);
    if(ucNumber & LED_TEMPERATURE_2)
        HAL_GPIO_WritePin(LED_TEMPERATURE_2_GPIO_Port, LED_TEMPERATURE_2_Pin, GPIO_PIN_SET);
}

void vLedRevesal(uint16_t ucNumber)
{
    if(ucNumber & LED_VI_RED1)
        HAL_GPIO_TogglePin(LED_VI_RED1_GPIO_Port, LED_VI_RED1_Pin);
    if(ucNumber & LED_VI_RED2)
        HAL_GPIO_TogglePin(LED_VI_RED2_GPIO_Port, LED_VI_RED2_Pin);
    if(ucNumber & LED_VI_GREEN)
        HAL_GPIO_TogglePin(LED_VI_GREEN_GPIO_Port, LED_VI_GREEN_Pin);
    if(ucNumber & LED_VI_YELLOW)
        HAL_GPIO_TogglePin(LED_VI_YELLOW_GPIO_Port, LED_VI_YELLOW_Pin);

    if(ucNumber & LED_GREEN)
        HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);
    if(ucNumber & LED_YELLOW)
        HAL_GPIO_TogglePin(LED_YELLOW_GPIO_Port, LED_YELLOW_Pin);

    if(ucNumber & LED_TEMPERATURE_1)
        HAL_GPIO_TogglePin(LED_TEMPERATURE_1_GPIO_Port, LED_TEMPERATURE_1_Pin);
    if(ucNumber & LED_TEMPERATURE_2)
        HAL_GPIO_TogglePin(LED_TEMPERATURE_2_GPIO_Port, LED_TEMPERATURE_2_Pin);
}
